package com.english.utils;

import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.UUID;

/**
 * 文件上传工具类
 * 提供通用的文件上传方法
 */
public class FileUploadUtil {

    /**
     * 上传文件到指定目录
     * @param file 上传的文件
     * @param uploadDir 上传目录（如 "src/main/resources/static/images/banner"）
     * @param maxSize 最大文件大小（字节），如 5*1024*1024 表示 5MB
     * @return 保存后的文件名
     * @throws IOException 文件保存失败时抛出
     * @throws IllegalArgumentException 文件校验失败时抛出
     */
    public static String uploadFile(MultipartFile file, String uploadDir, long maxSize) throws IOException {
        // 检查文件是否为空
        if (file.isEmpty()) {
            throw new IllegalArgumentException("请选择要上传的文件");
        }

        // 检查文件大小
        if (file.getSize() > maxSize) {
            throw new IllegalArgumentException("文件大小不能超过" + (maxSize / 1024 / 1024) + "MB");
        }

        // 检查文件类型（这里只做图片类型校验，可根据需要修改）
        String contentType = file.getContentType();
        if (contentType == null || !contentType.startsWith("image/")) {
            throw new IllegalArgumentException("只能上传图片文件");
        }

        // 确保上传目录存在
        Path dirPath = Paths.get(uploadDir);
        if (!Files.exists(dirPath)) {
            Files.createDirectories(dirPath);
        }

        // 生成唯一文件名
        String originalFilename = file.getOriginalFilename();
        String extension = "";
        if (originalFilename != null && originalFilename.contains(".")) {
            extension = originalFilename.substring(originalFilename.lastIndexOf("."));
        }
        String filename = UUID.randomUUID().toString() + extension;

        // 保存文件
        Path filePath = dirPath.resolve(filename);
        Files.copy(file.getInputStream(), filePath);

        return filename;
    }
}